#include <iostream>
#include <string>
using namespace std;

// #define ONLINE_GUDGE
// #define DEBUG
const int N = 21;

int n;
string word[N];
int g[N][N]; //g[i][j]: i的后缀和j的前缀之间重复个数
int used[N]; // < 2

int ans;

void dfs(string dragon, int last) // 龙头 结尾单词编号
{
    ans = max((int)dragon.size(), ans);

    used[last]++;

    for (int i = 0; i < n; i++) {
        if (g[last][i] && used[i] < 2) { // 存在前后缀相同 使用次数不超过2
            dfs(dragon + word[i].substr(g[last][i]), i);
        }
    }

    used[last]--;
}

int main()
{
    #ifdef ONLINE_GUDGE

    #else
    freopen("./in.txt", "r", stdin);
    #endif
    ios::sync_with_stdio(false);   
	cin.tie(0);
    
    cin >> n;
    for(int i = 0; i < n; i++) cin >> word[i];

    char start; cin >> start;
    
    for(int i = 0; i < n; i++)
        for(int j = 0; j < n; j++)
        {
            string a = word[i], b = word[j];
            for(int k = 1; k < min(a.size(), b.size()); k++) // a的后缀和b的前缀的k个字符是否相等
            {
                if(a.substr(a.size() - k, k) == b.substr(0, k))
                {
                    g[i][j] = k; 
                    #ifdef DEBUG
                    printf("word[%d]:%s\nword[%d]:%s\nsame[%d]:%s\n",i, a.c_str(), j, b.c_str(), g[i][j], b.substr(0,k).c_str());
                    printf("\n");
                    #endif 
                    break;
                }
            }
        }
    

    for(int i = 0; i < n; i++){
        if(word[i][0] == start){
            dfs(word[i], i);
        }
    }
    
    

    #ifdef DEBUG
    printf("--------------g------------------------\n  ");
        for(int i = 0; i < n; i++)
            printf("%d ", i);
        printf("\n");
        for(int i = 0; i < n; i++)
        {
            printf("%d ", i);
            for(int j = 0; j < n; j++)
            {
                printf("%d ", g[i][j]);
            }
            printf("\n");
        }
        printf("---------------------------------------\n");
    #endif

    cout << ans << endl;

    return 0;
}
